package com.csw.android.player.base

import androidx.lifecycle.MutableLiveData
import com.google.android.exoplayer2.Player

/**
 * 播放器状态信息
 */
class PlayerInfo {

    /**
     * 信息更新实时数据，订阅此属性以获取播放器的实时状态变化
     */
    val onInfoUpdate = MutableLiveData(System.currentTimeMillis())

    /**播放进度*/
    var playProgress = 0L
        set(value) {
            field = value
            postInfoUpdate()
        }

    /**缓冲进度*/
    var bufferProgress = 0L
        set(value) {
            field = value
            postInfoUpdate()
        }

    /**媒体总时长*/
    var duration = 0L
        set(value) {
            field = value
            postInfoUpdate()
        }

    /**播放按钮状态，与播放状态不同，例如播放器处于缓冲中，其缓冲后会继续播放，则此时播放按钮状态应该是播放中*/
    var buttonPlaying = false
        set(value) {
            field = value
            postInfoUpdate()
        }

    /**播放状态*/
    @Player.State
    var playState: Int = Player.STATE_IDLE
        set(value) {
            field = value
            postInfoUpdate()
        }

    /**视频宽度*/
    var videoWidth = 0
        set(value) {
            field = value
            postInfoUpdate()
        }

    /**视频高度*/
    var videoHeight = 0
        set(value) {
            field = value
            postInfoUpdate()
        }

    /**
     * post通知播放器状态改变
     *
     * 通过post更新的方式，可以避免连续修改属性时通知多次。
     */
    private fun postInfoUpdate() {
        onInfoUpdate.postValue(System.currentTimeMillis())
    }

    /**重置播放器状态*/
    fun reset() {
        playProgress = 0
        duration = 0
        buttonPlaying = false
        playState = Player.STATE_IDLE
        videoWidth = 0
        videoHeight = 0
    }

}